6.1.- Integrat L293
1- Esquema elèctric.
El següent esquema elèctric ens permet treballar amb motor connectats a fonts d'alimentació externes o piles de 6 a 19V.
Recorda que cal connectar el negatiu de la font d'alimentació al GND en la placa Arduino.
2. Funcionament del integrat L293D. Taula de la veritat
A l'explicació que segueix anem a esmentar sols les potes de l'integrat L293D. (No els confongau amb el pins d'Arduino).
S'alimenta d'un voltatge de 5V a les potes 8 i 16.
El pol negatiu o GND es posa a les potes 4 , 5, 12, i 13.
El motor A és posa a les potes 3 i 6. El motor B és posa a les potes 11 i 14.
Si la pota 1 no rep alimentació elèctrica no funciona el motor A. Si la pota 9 no rep alimentació elèctrica no funciona el motor B.
Les potes 2 i 7 determinen amb si el funcionament del motor A és avant o enrere. Mireu la taula de la veritat.
Les potes 10 i 15 determinen amb si el funcionament del motor B és avant o enrere. Mireu la taula de la veritat.
Taula de la veritat:
Pota 2 | Pota 7 |
Motor A |
Aturat (LOW) | Aturat (LOW) | Aturat |
Engegat (HIGH) |
Aturat (LOW) |
Engegat i avant |
Aturat (LOW) |
Engegat (HIGH) | Engegat i enrrere |
Engegat (HIGH) | Engegat (HIGH) | Aturat |
Pota 15 |
Pota 10 |
Motor B |
Aturat (LOW) | Aturat (LOW) | Aturat |
Engegat (HIGH) |
Aturat (LOW) |
Engegat i avant |
Aturat (LOW) |
Engegat (HIGH) | Engegat i enrrere |
Engegat (HIGH) | Engegat (HIGH) | Aturat |
3. Shield per Arduino Uno i Arduino clònica
Aquest és el shield i la forma d'alimentar-lo de forma externa si li posem fins a dos motors, o de forma interna si sols volen utilitzar les clemes per fixar els fils a la targeta Arduino.
El procediment per tindre el nostre circuit és:
- Agafem paper de transferència tèrmica comprat en una tenda de electrònica, i imprimim amb una impressora lasser el dibuix amb el Shield per Arduino Uno o per Clòniques d'Arduino (amb més pins).
- Retallen el paper per fer sols un circuit.
- Posem el paper sobre la placa i el enganxem amb cita aïllant.. Posem a sobre un drap net i planxem amb la planxa a mitja temperatura. No moveu el paper.
- En acabar de transferir tot el dibuix, preparem la barreja d'àcid sulfúric (1 part) , peròxid d'hidrogen (1 part) i aigua (2 parts).
- Introduïm la plaqueta i esperem que es dissolga tot el coure llevat del que està protegit per el dibuix.
- Amb unes pinces traguem el circuit, el llavem amb aigua, el eixuguem.
- Netegem el circuit amb acetona.
- El eixuguem i fem els forats amb un trepant elèctric petit.
- Soldem el socal del L293D i els 6 connector per als cables.
- Posem el integrat L293D al socal, connectem el cables com es veu al començament d'aquest full i provem el programa de baix.
4. Programa de mostra per provar el motors A i B connectats mitjançant el Shield Arduino2Motor
// Copyleft (C) 2015 Carles Ferrando Garcia
// License: GNU GPL v3 http://www.gnu.org/copyleft/gpl.html
// funcions motorA i motorB
// En aquest programa utilitzem les funcions motorAonH() , motorAoff() , motorAonA() , motorAonHpols(x) , motorAonApols(x) [on x varia de 0 a 100]
// En aquest programa utilitzem les funcions motorBonH() , motorBoff() , motorBonA() , motorBonHpols(x) , motorBonApols(x) [on x varia de 0 a 100]
//definim ports motor A
int contacte1motorA = 11;
int contacte2motorA = 12;
int activamotorA = 9;
//definim ports motor B
int contacte1motorB = 4;
int contacte2motorB = 7;
int activamotorB = 3;
void setup() {
// Configura els ports motor A con eixides
pinMode(contacte1motorA, OUTPUT);
pinMode(contacte2motorA, OUTPUT);
pinMode(activamotorA, OUTPUT);
// Configura els ports motor B con eixides
pinMode(contacte1motorB, OUTPUT);
pinMode(contacte2motorB, OUTPUT);
pinMode(activamotorB, OUTPUT);
}
void loop()
{
motorAonH();
delay(2000);
motorAoff();
delay(2000);
motorAonA();
delay(2000);
motorAoff();
delay(2000);
//motorAonHpols(56);
//delay(1000);
//motorAoff();
//delay(1000);
//motorAonApols(56);
//delay (1000);
//motorAoff();
//delay(1500);
motorBonH();
delay(1000);
motorBoff();
delay(2000);
motorBonA();
delay(2000);
motorBoff();
delay(2000);
//motorBonHpols(56);
//delay(1000);
//motorBoff();
//delay(1000);
//motorBonApols(56);
//delay (1000);
//motorBoff();
//delay(1500);
}
//___________ FUNCIONS MOTOR A
//
//anem a crear la funció activar el motor A en sentit Horari
void motorAonH()
{
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem el motorA en sentit Horari
digitalWrite(contacte1motorA, LOW);
digitalWrite(contacte2motorA, HIGH);
}
//
//anem a crear la funció per aturar el motor A
void motorAoff()
{
// desactivem el motorA per poder parar-lo
digitalWrite(activamotorA, LOW);
}
//
//anem a crear la funció engega motor A en sentit Antihorari
void motorAonA()
{
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem el motorA en sentit Antihorari
digitalWrite(contacte1motorA, HIGH);
digitalWrite(contacte2motorA, LOW);
}
//Anem a crear la funcio engega el motor A en sentit Horari polsat al «pols %» polsat
void motorAonHpols (int pols)
{
float escriuD= pols/100.0*255.0;
int escriuE=int(escriuD);
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem el motorA en sentit enrere al pols% del puls possible
analogWrite(contacte1motorA,0);
analogWrite(contacte2motorA,escriuE);
}
//Anem a crear la funcio engega el motor A en sentit Antihorari polsat al «pols %» polsat
void motorAonApols (int pols)
{
float escriuD= pols/100.0*255.0;
int escriuE=int(escriuD);
// activa el motorA per poder engegar-lo
digitalWrite(activamotorA, HIGH);
// engeguem el motorA en sentit enrere al pols% del puls possible
analogWrite(contacte1motorA,escriuE);
analogWrite(contacte2motorA,0);
}
//_________ FUNCIONS MOTOR B
//
//anem a crear la funció activar el motor B en sentit Horari
void motorBonH()
{
// activa el motor B per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem el motor B en sentit Horari
digitalWrite(contacte1motorB, LOW);
digitalWrite(contacte2motorB, HIGH);
}
//
//anem a crear la funció per aturar el motor B
void motorBoff()
{
// desactivem el motor B per poder parar-lo
//digitalWrite(activamotorB, LOW);
digitalWrite(contacte1motorB, LOW);
digitalWrite(contacte2motorB, LOW);
}
//
//anem a crear la funció engega motor B en sentit Antihorari
void motorBonA()
{
// activa el motorB per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem el motorB en sentit Antihorari
digitalWrite(contacte1motorB, HIGH);
digitalWrite(contacte2motorB, LOW);
}
//Anem a crear la funcio engega el motor B en sentit Horari polsat al «pols %» polsat
void motorBonHpols (int pols)
{
float escriuDB= pols/100.0*255.0;
int escriuEB=int(escriuDB);
// activa el motorB per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem el motorB en sentit enrere al pols% del puls possible
analogWrite(contacte1motorB,0);
analogWrite(contacte2motorB,escriuEB);
}
//Anem a crear la funcio engega el motor B en sentit Antihorari polsat al «pols %» polsat
void motorBonApols (int pols)
{
float escriuDB= pols/100.0*255.0;
int escriuEB=int(escriuDB);
// activa el motorB per poder engegar-lo
digitalWrite(activamotorB, HIGH);
// engeguem el motorB en sentit enrere al pols% del puls possible
analogWrite(contacte1motorB,escriuEB);
analogWrite(contacte2motorB,0);
}
|
Ací tens el programa en un format més optim per Arduino IDE: MotorAB.ino.zip
Les funcions del Motor A utilitzades al programa tenen el significat:
- motorAonH()--> Engega el motor A en sentit Horari
- motorAoff() --> Atura el motor A
- motorAonA()--> Engega el motor A en sentit Antihorari
- motorAonHpols(x) --> Engega el motor A en sentit Horari polsat al x%, on x varia de 0 a 100
- motorAonApols(x) --> Engega el motor A en sentit Antihorari polsat al x%, on x varia de 0 a 100
Les funcions del Motor B utilitzades al programa tenen el significat:
- motorBonH()--> Engega el motor B en sentit Horari
- motorBoff() --> Atura el motor B
- motorBonA()--> Engega el motor B en sentit Antihorari
- motorBonHpols(x) --> Engega el motor B en sentit Horari polsat al x%, on x varia de 0 a 100
- motorBonApols(x) --> Engega el motor B en sentit Antihorari polsat al x%, on x varia de 0 a 100
Si sols anem a utilitzar el motor A, no definirem ni les variables globals del motor B ni configurarem els ports del motor B a la secció void setup, així comentarem aquestes línies, les funcions del motor B no cal que les comentem, recordeu sols comentarem les definicions de les variables globals i la secció setup que no anem a gastar, d'aquesta forma no perdrem pins que podrem utilitzar amb altres dispositius.
A continuació tens un vídeo mostrant-te el funcionament del shield amb Arduino amb aquest programa.
Llicenciat sota la Llicència Creative Commons Reconeixement NoComercial CompartirIgual 3.0